import axios from 'axios'
import _global from '../assets/js/global'
import {Message} from 'element-ui'
import store from '../store'
var server = axios.create({
    timeout: 5000,
    baseURL : 'http://localhost:3333/',
    headers:{'Content-Type': 'application/x-www-form-urlencoded',
    'X-Requested-With': 'XMLHttpRequest',},
    'responseType': 'json',
    'responseEncoding': 'utf8',
    // proxy: {
    //     host: 'http://localhost',
    //     port: 3333
    //   }
})
server.interceptors.response.use(response => {
    store.dispatch('hideLoading')
    if (typeof response.data.errCode !== 'undefined' && typeof response.data.errUrl !== 'undefined' && typeof response.data.errDateTime !== 'undefined' && typeof response.data.errStack !== 'undefined' && typeof response.data.callStack !== 'undefined') {
        if (response.data.errCode === 401) {
          if (!_global.forceLogined) {
            window.alert('您需要重新登录！')
            _global.forceLogined = true
          }
          let homeLocation = window.location
          let homeUrl = homeLocation.protocol + '//' + homeLocation.hostname + (homeLocation.port ? ':' + homeLocation.port : '') + '/'
          window.location.href = homeUrl
          return Promise.reject(response.data)
        }
    }
    return response.data
},
error => {
    if (error.response) {
        switch (error.response.status) {
          case 401:
            Message('会话已过期，请重新登录', '提示', {
              confirmButtonText: '确定',
              type: 'warning',
              callback: action => {
                this.$router.push('/login')
              }
            })
            break
          case 403:
            console.log('403')
            break
          default:
            Message({
              message: `服务器错误！错误代码：${error.response.status}`,
              type: 'error'
            })
        }
        return Promise.reject(error.response.data)
      }
}
)
// http ajax-request 拦截器
server.interceptors.request.use(
    request => {
        store.dispatch('showLoading');
      if (request.method === 'get') {
        // 绑定random参数值，以便确保页面刷新！
        // 以下修改params参数的方式，将导致menu-bar无法呈现！
        // request.params['randomId'] = new Date().getTime()
        request.url += request.url.indexOf('?') === -1 ? '?randomId=' + new Date().getTime() : '&randomId=' + new Date().getTime()
      }
      // 检查是否需要附加/context-root
    //   if (request.url.indexOf(global_._BASE_URL) === -1 && request.url.indexOf(global_._BASE_URL.substr(1)) === -1) {
        // 附加绑定context-root
        // request.url = global_._BASE_URL + request.url
        request.url = request.url.replace(/\/{2,}/g, '/')
    //   }
      // console.log('request', request)
      return request
    }
  )
//axios的一些配置，比如发送请求显示loading，请求回来loading消失之类的
//
// server.interceptors.request.use(function(config) { //配置发送请求的信息
//     store.dispatch('showLoading');
//     return config;
// }, function(error) {
//     return Promise.reject(error);
// });

// axios.interceptors.response.use(function(response) { //配置请求回来的信息
//     store.dispatch('hideLoading');
//     return response;
// }, function(error) {
//     return Promise.reject(error);
// });
export default server